//	--------------------------------------------------------------------
//	Copyright(C) 2006,2007 Zhao Yukun. All rights reserved.
//	This file is a part  the Xeres system.
//	Xeres 2007
//	Contact : xeres.engine@gmail.com
//	$(reservedInfo)
//	$(reservedDeclaration)
//	--------------------------------------------------------------------
///	@file	<xtype.h>
///	@path	~/src/
///	@date	2008/05/26
///	@desc	.

#pragma once

/* Predefine some common types. */
typedef unsigned char						byte;
typedef unsigned char						uchar;
typedef unsigned short						ushort;
typedef unsigned int						uint;
typedef unsigned long						ulong;

/* For storage based declarations. */

typedef __int8								int8;
typedef __int16								int16;
typedef __int32								int32;
typedef __int64								int64;

typedef unsigned __int8						uint8;
typedef unsigned __int16					uint16;
typedef unsigned __int32					uint32;
typedef unsigned __int64					uint64;

typedef float								real32;
typedef double								real64;
typedef long double							real80;

typedef struct data32 { uint8 u8[4]; uint16 u16[2]; uint32 u32[1]; real32 f32[1]; } * pdata32;
typedef struct data64 { uint8 u8[8]; uint16 u16[4]; uint32 u32[2]; uint64 u64[1]; real32 f32[2]; real64 f64[1]; } * pdata64;

/* Type identifiers - dummy type for template policy dispatching. */

#ifdef __cplusplus

namespace xeres {

	/// \brief	Type identifier of pointer policy.
	struct _ptr;

	/// \brief	Type identifier of reference policy.
	struct _ref;

	/// \brief	Type identifier of callback policy.
	struct _call;

	/// \brief	Type identifier of value policy.
	struct _value;

	/// \brief	Type identifier of null.
	struct _null;

	/// \brief	Type identifier of error.
	struct _error;

	/// \brief	Type identifier of file.
	struct _file;

	/// \brief	Type identifier of any.
	struct _any;

	/// \brief	Type identifier of lock.
	struct _lock;

	/// \brief	Type identifier of free operation.
	struct _free;

	/// \brief	Type identifier of delete operation.
	struct _delete;

} // namespace xeres

#endif /*__cplusplus*/
